home *** CD-ROM | disk | FTP | other *** search
Oberon Document | 1994-06-07 | 20.3 KB | 563 lines | [oODC/obnF] |
- Documents.StdDocumentDesc
- Documents.DocumentDesc
- Containers.ViewDesc
- Views.ViewDesc
- Stores.StoreDesc
- Documents.ModelDesc
- Containers.ModelDesc
- Models.ModelDesc
- Stores.ElemDesc
- TextViews.StdViewDesc
- TextViews.ViewDesc
- TextModels.StdModelDesc
- TextModels.ModelDesc
- TextModels.AttributesDesc
- Geneva
- Geneva
- StdStamps.StdViewDesc
- Geneva
- Geneva
- MODULE MacFileMgr;
- (** cp
- IMPORT SYSTEM, MacTypes;
- CONST
- (** access modes for opening files **)
- fsCurPerm* = 0; (** whatever permission is allowed **)
- fsRdPerm* = 1; (** read permission **)
- fsWrPerm* = 2; (** write permission **)
- fsRdWrPerm* = 3; (** exclusive read/write permission **)
- fsRdWrShPerm* = 4; (** shared read/write permission **)
- (** file mark positioning modes **)
- fsAtMark* = 0;
- fsFromStart* = 1;
- fsFromLEOF* = 2;
- fsFromMark* = 3;
- rdVerify* = 64;
- HANDLE = 2;
- UNTAGGED = 1;
- CODE = 1;
- NOSTKCHK = 4;
- D0 = 0; A0 = 8; EQ = 7;
- TYPE
- (** File System Specification Record **)
- FSSpec* = RECORD (MacTypes.Data)
- vRefNum*: INTEGER; (** volume reference number **)
- parID*: LONGINT; (** directory ID of parent directory **)
- name*: MacTypes.Str63 (** filename or directory name **)
- END;
- FSSpecPtr* = POINTER TO FSSpec;
- FSSpecHandle* = POINTER [HANDLE] TO FSSpec;
- (** Standard File Reply Record **)
- StandardFileReply* = RECORD (MacTypes.Data)
- sfGood*: BOOLEAN; (** TRUE if user did not cancel **)
- sfReplacing*: BOOLEAN; (** TRUE if replacing file with same name **)
- sfType*: MacTypes.OSType; (** file type **)
- sfFile*: FSSpec; (** selected item **)
- sfScript*: INTEGER; (** script of selected item's name **)
- sfFlags*: MacTypes.Set; (** Finder flags of selected item **)
- sfIsFolder*: BOOLEAN; (** selected item is a folder **)
- sfIsVolume*: BOOLEAN; (** selected item is a volume **)
- sfReserved1*: LONGINT;
- sfReserved2*: INTEGER
- END;
- SFTypeList* = ARRAY [UNTAGGED] 4 OF MacTypes.OSType;
- FInfo* = RECORD (MacTypes.Data)
- fdType*,
- fdCreator*: MacTypes.OSType;
- fdFlags*: MacTypes.Set;
- fdLocation*: MacTypes.Point;
- fdFldr*: INTEGER
- END;
- FXInfo = RECORD (MacTypes.Data)
- fdIconID: INTEGER;
- fdUnused: ARRAY [UNTAGGED] 4 OF INTEGER;
- fdComment: INTEGER;
- fdPutAway: LONGINT
- END;
- DInfo = RECORD (MacTypes.Data)
- frL, frT, frR, frB: INTEGER;
- frFlags: MacTypes.Set;
- frLocation: MacTypes.Point;
- frView: INTEGER
- END;
- DXInfo = RECORD (MacTypes.Data)
- frScroll: MacTypes.Point;
- frOpenChain: LONGINT;
- frUnused: INTEGER;
- frComment: INTEGER;
- frPutAway: LONGINT
- END;
- HParamBlk = RECORD (MacTypes.Data)
- qLink: LONGINT;
- qType, ioTrap: INTEGER;
- ioCmdAddr, ioCompletion: LONGINT;
- ioResult: INTEGER;
- ioNamePtr: LONGINT;
- ioVRefNum: INTEGER
- END;
- HIOParamBlk = RECORD (HParamBlk)
- ioRefNum: INTEGER;
- ioVersNum: SHORTINT;
- ioPermssn: SHORTINT;
- ioMisc: LONGINT;
- ioBuffer: MacTypes.Ptr;
- ioReqCount, ioActCount: LONGINT;
- ioPosMode: INTEGER;
- ioPosOffset: LONGINT
- END;
- HFileParamBlk = RECORD (HParamBlk)
- ioFRefNum: INTEGER;
- ioFVersNum: SHORTINT;
- ioFDirIndex: INTEGER;
- ioFlAttrib, ioFlVersNum: SHORTINT;
- ioFlFndrInfo: FInfo;
- ioDirID: LONGINT;
- ioFlStBlk: INTEGER;
- ioFlLgLen, ioFlPyLen: LONGINT;
- ioFlRStBlk: INTEGER;
- ioFlRLgLen, ioFlRPyLen, ioFlCrDat, ioFlMdDat: LONGINT
- END;
- HVolParamBlk = RECORD (HParamBlk)
- filler2: LONGINT;
- ioVolIndex: INTEGER;
- ioVCrDate: LONGINT;
- ioVLsMod: LONGINT;
- ioVAtrb: INTEGER;
- ioVNmFls: INTEGER;
- ioVBitMap: INTEGER;
- ioAllocPtr: INTEGER;
- ioVNmAlBlks: INTEGER;
- ioVAlBlkSiz: LONGINT;
- ioVClpSiz: LONGINT;
- ioAlBlSt: INTEGER;
- ioVNxtCNID: LONGINT;
- ioVFrBlk: INTEGER;
- ioVSigWord: INTEGER;
- ioVDrvInfo: INTEGER;
- ioVDRefNum: INTEGER;
- ioVFSID: INTEGER;
- ioVBkUp: LONGINT;
- ioVSeqNum: INTEGER;
- ioVWrCnt: LONGINT;
- ioVFilCnt: LONGINT;
- ioVDirCnt: LONGINT;
- ioVFndrInfo: ARRAY [UNTAGGED] 8 OF LONGINT
- END;
- FCBPBRec = RECORD (HParamBlk)
- ioRefNum: INTEGER;
- filler: INTEGER;
- ioFCBIndx: INTEGER;
- filler1: INTEGER;
- ioFCBFlNm: LONGINT;
- ioFCBFlags: INTEGER;
- ioFCBStBlk: INTEGER;
- ioFCBEOF: LONGINT;
- ioFCBPLen: LONGINT;
- ioFCBCrPs: LONGINT;
- ioFCBVRefNum: INTEGER;
- ioFCBClpSiz: LONGINT;
- ioFCBParID: LONGINT
- END;
- CInfoPBRec = RECORD (HParamBlk)
- ioFRefNum: INTEGER;
- ioFVersNum: SHORTINT;
- filler1: SHORTINT;
- ioFDirIndex: INTEGER;
- ioFlAttrib: SHORTINT;
- ioACUser: SHORTINT
- END;
- CFileInfoPBRec = RECORD (CInfoPBRec)
- ioFlFndrInfo: FInfo;
- ioDirID: LONGINT;
- ioFlStBlk: INTEGER;
- ioFlLgLen: LONGINT;
- ioFlPyLen: LONGINT;
- ioFlRStBlk: INTEGER;
- ioFlRLgLen: LONGINT;
- ioFlRPyLen: LONGINT;
- ioFlCrDat: LONGINT;
- ioFlMdDat: LONGINT;
- ioFlBkDat: LONGINT;
- ioFlXFndrInfo: FXInfo;
- ioFlParID: LONGINT;
- ioFlClpSiz: LONGINT
- END;
- CDirInfoPBRec = RECORD (CInfoPBRec)
- ioDrUsrWds: DInfo;
- ioDrDirID: LONGINT;
- ioDrNmFls: INTEGER;
- filler3: ARRAY [UNTAGGED] 9 OF INTEGER;
- ioDrCrDat: LONGINT;
- ioDrMdDat: LONGINT;
- ioDrBkDat: LONGINT;
- ioDrFndrInfo: DXInfo;
- ioDrParID: LONGINT
- END;
- PROCEDURE [CODE] PBGetFPos 0A0H, 018H;
- PROCEDURE [CODE] PBSetFPos 0A0H, 044H;
- PROCEDURE [CODE] PBRead 0A0H, 002H;
- PROCEDURE [CODE] PBWrite 0A0H, 003H;
- PROCEDURE [CODE] PBClose 0A0H, 001H;
- PROCEDURE [CODE] PBGetEOF 0A0H, 011H;
- PROCEDURE [CODE] PBSetEOF 0A0H, 012H;
- PROCEDURE [CODE] PBFlushVol 0A0H, 013H;
- PROCEDURE [CODE] PBHGetVInfo 0A2H, 007H;
- PROCEDURE [CODE] HFSDispatch 0A2H, 060H;
- PROCEDURE [CODE] standardGetFile (fileFilter: MacTypes.ProcPtr;
- numTypes: INTEGER; typeList: SFTypeList;
- VAR reply: StandardFileReply; n: INTEGER) 0A9H, 0EAH;
- PROCEDURE [CODE] customGetFile (fileFilter: MacTypes.ProcPtr; numTypes: INTEGER;
- typeList: SFTypeList; VAR reply: StandardFileReply;
- dlgID: INTEGER; where: MacTypes.Point; dlgHook: MacTypes.ProcPtr;
- filterProc: MacTypes.ProcPtr; activeList: MacTypes.Ptr; activateProc: MacTypes.ProcPtr;
- yourDataPtr: LONGINT; n: INTEGER) 0A9H, 0EAH;
- PROCEDURE [CODE] standardPutFile (prompt: MacTypes.Str255; defaultName: MacTypes.Str255;
- VAR reply: StandardFileReply; n: INTEGER) 0A9H, 0EAH;
- PROCEDURE [CODE] customPutFile (prompt: MacTypes.Str255; defaultName: MacTypes.Str255;
- VAR reply: StandardFileReply; dlgID: INTEGER;
- where: MacTypes.Point; dlgHook: MacTypes.ProcPtr; filterProc: MacTypes.ProcPtr;
- activeList: MacTypes.Ptr; activateProc: MacTypes.ProcPtr; yourDataPtr: LONGINT; n: INTEGER) 0A9H, 0EAH;
- PROCEDURE [CODE] fSpOpen (spec: FSSpec; permission: SHORTINT;
- VAR refNum: INTEGER): INTEGER 0AAH, 052H;
- PROCEDURE [CODE] fSpCreate (spec: FSSpec; creator: MacTypes.OSType; fileType: MacTypes.OSType;
- scriptTag: INTEGER): INTEGER 0AAH, 052H;
- PROCEDURE [CODE] fSpDirCreate (spec: FSSpec; scriptTag: INTEGER;
- VAR createdDirID: LONGINT): INTEGER 0AAH, 052H;
- PROCEDURE [CODE] fSpDelete (spec: FSSpec): INTEGER 0AAH, 052H;
- PROCEDURE [CODE] fSpGetFInfo (spec: FSSpec; VAR fndrInfo: FInfo): INTEGER 0AAH, 052H;
- PROCEDURE [CODE] fSpSetFInfo (spec: FSSpec; fndrInfo: FInfo): INTEGER 0AAH, 052H;
- PROCEDURE [CODE] fSpSetFLock (spec: FSSpec): INTEGER 0AAH, 052H;
- PROCEDURE [CODE] fSpRstFLock (spec: FSSpec): INTEGER 0AAH, 052H;
- PROCEDURE [CODE] fSpRename (spec: FSSpec; newName: MacTypes.Str255): INTEGER 0AAH, 052H;
- PROCEDURE [CODE] fSpMove (source, dest: FSSpec): INTEGER 0AAH, 052H;
- PROCEDURE [CODE] fSpMakeFSSpec (vRefNum: INTEGER; dirID: LONGINT;
- fileName: MacTypes.Str255; VAR spec: FSSpec): INTEGER 0AAH, 052H;
- PROCEDURE [NOSTKCHK] PBGetCatInfoSync (VAR pb: CInfoPBRec): INTEGER;
- BEGIN
- SYSTEM.PUTREG(A0, SYSTEM.ADR(pb));
- SYSTEM.PUTREG(D0, LONG(LONG(9))); HFSDispatch;
- RETURN pb.ioResult
- END PBGetCatInfoSync;
- (** File Specification Routines **)
- (** Opening Files **)
- PROCEDURE [NOSTKCHK] StandardGetFile* (fileFilter: MacTypes.ProcPtr;
- numTypes: INTEGER; typeList: SFTypeList;
- VAR reply: StandardFileReply);
- BEGIN
- standardGetFile(fileFilter, numTypes, typeList, reply, 6)
- END StandardGetFile;
- PROCEDURE [NOSTKCHK] CustomGetFile* (fileFilter: MacTypes.ProcPtr; numTypes: INTEGER;
- typeList: SFTypeList; VAR reply: StandardFileReply;
- dlgID: INTEGER; where: MacTypes.Point; dlgHook: MacTypes.ProcPtr;
- filterProc: MacTypes.ProcPtr; activeList: MacTypes.Ptr; activateProc: MacTypes.ProcPtr;
- yourDataPtr: LONGINT);
- BEGIN
- customGetFile(fileFilter, numTypes, typeList, reply, dlgID, where, dlgHook,
- filterProc, activeList, activateProc, yourDataPtr, 8)
- END CustomGetFile;
- (** Saving Files **)
- PROCEDURE [NOSTKCHK] StandardPutFile* (prompt: MacTypes.Str255; defaultName: MacTypes.Str255;
- VAR reply: StandardFileReply);
- BEGIN
- standardPutFile(prompt, defaultName, reply, 5)
- END StandardPutFile;
- PROCEDURE [NOSTKCHK] CustomPutFile* (prompt: MacTypes.Str255; defaultName: MacTypes.Str255;
- VAR reply: StandardFileReply; dlgID: INTEGER;
- where: MacTypes.Point; dlgHook: MacTypes.ProcPtr; filterProc: MacTypes.ProcPtr;
- activeList: MacTypes.Ptr; activateProc: MacTypes.ProcPtr; yourDataPtr: LONGINT);
- BEGIN
- customPutFile(prompt, defaultName, reply, dlgID, where, dlgHook, filterProc,
- activeList, activateProc, yourDataPtr, 7)
- END CustomPutFile;
- (** File Access Routines **)
- (** Reading, Writing, and Closing Files **)
- PROCEDURE [NOSTKCHK] FSRead* (refNum: INTEGER; VAR count: LONGINT; buffPtr: MacTypes.Ptr): INTEGER;
- VAR pb: HIOParamBlk;
- BEGIN
- pb.ioNamePtr := 0;
- pb.ioRefNum := refNum;
- pb.ioBuffer := buffPtr;
- pb.ioReqCount := count;
- pb.ioPosMode := fsAtMark;
- pb.ioPosOffset := 0;
- SYSTEM.PUTREG(A0, SYSTEM.ADR(pb));
- PBRead;
- count := pb.ioActCount;
- RETURN pb.ioResult
- END FSRead;
- PROCEDURE [NOSTKCHK] FSWrite* (refNum: INTEGER; VAR count: LONGINT; buffPtr: MacTypes.Ptr): INTEGER;
- VAR pb: HIOParamBlk;
- BEGIN
- pb.ioNamePtr := 0;
- pb.ioRefNum := refNum;
- pb.ioBuffer := buffPtr;
- pb.ioReqCount := count;
- pb.ioPosMode := fsAtMark;
- pb.ioPosOffset := 0;
- SYSTEM.PUTREG(A0, SYSTEM.ADR(pb));
- PBWrite;
- count := pb.ioActCount;
- RETURN pb.ioResult
- END FSWrite;
- PROCEDURE [NOSTKCHK] FSReadAt* (refNum: INTEGER; org: LONGINT; VAR count: LONGINT; buffPtr: MacTypes.Ptr): INTEGER;
- VAR pb: HIOParamBlk;
- BEGIN
- pb.ioNamePtr := 0;
- pb.ioRefNum := refNum;
- pb.ioBuffer := buffPtr;
- pb.ioReqCount := count;
- pb.ioPosMode := fsFromStart;
- pb.ioPosOffset := org;
- SYSTEM.PUTREG(A0, SYSTEM.ADR(pb));
- PBRead;
- count := pb.ioActCount;
- RETURN pb.ioResult
- END FSReadAt;
- PROCEDURE [NOSTKCHK] FSWriteAt* (refNum: INTEGER; org: LONGINT; VAR count: LONGINT; buffPtr: MacTypes.Ptr): INTEGER;
- VAR pb: HIOParamBlk;
- BEGIN
- pb.ioNamePtr := 0;
- pb.ioRefNum := refNum;
- pb.ioBuffer := buffPtr;
- pb.ioReqCount := count;
- pb.ioPosMode := fsFromStart;
- pb.ioPosOffset := org;
- SYSTEM.PUTREG(A0, SYSTEM.ADR(pb));
- PBWrite;
- count := pb.ioActCount;
- RETURN pb.ioResult
- END FSWriteAt;
- PROCEDURE [NOSTKCHK] FSClose* (refNum: INTEGER): INTEGER;
- VAR pb: HIOParamBlk; name: MacTypes.Str255;
- BEGIN
- pb.ioNamePtr := SYSTEM.ADR(name);
- pb.ioRefNum := refNum;
- SYSTEM.PUTREG(A0, SYSTEM.ADR(pb));
- PBClose;
- RETURN pb.ioResult
- END FSClose;
- (** Manipulating the File Mark **)
- PROCEDURE [NOSTKCHK] GetFPos* (refNum: INTEGER; VAR filePos: LONGINT): INTEGER;
- VAR pb: HIOParamBlk; name: MacTypes.Str255;
- BEGIN
- pb.ioNamePtr := SYSTEM.ADR(name);
- pb.ioRefNum := refNum;
- SYSTEM.PUTREG(A0, SYSTEM.ADR(pb));
- PBGetFPos;
- filePos := pb.ioPosOffset;
- RETURN pb.ioResult
- END GetFPos;
- PROCEDURE [NOSTKCHK] SetFPos* (refNum: INTEGER; posMode: INTEGER; posOff: LONGINT): INTEGER;
- VAR pb: HIOParamBlk; name: MacTypes.Str255;
- BEGIN
- pb.ioNamePtr := SYSTEM.ADR(name);
- pb.ioRefNum := refNum;
- pb.ioPosMode := posMode;
- pb.ioPosOffset := posOff;
- SYSTEM.PUTREG(A0, SYSTEM.ADR(pb));
- PBSetFPos;
- RETURN pb.ioResult
- END SetFPos;
- (** Manipulating the End-of-File **)
- PROCEDURE [NOSTKCHK] GetEOF* (refNum: INTEGER; VAR logEOF: LONGINT): INTEGER;
- VAR pb: HIOParamBlk;
- BEGIN
- pb.ioNamePtr := 0;
- pb.ioRefNum := refNum;
- SYSTEM.PUTREG(A0, SYSTEM.ADR(pb));
- PBGetEOF;
- logEOF := pb.ioMisc;
- RETURN pb.ioResult
- END GetEOF;
- PROCEDURE [NOSTKCHK] SetEOF* (refNum: INTEGER; logEOF: LONGINT): INTEGER;
- VAR pb: HIOParamBlk;
- BEGIN
- pb.ioNamePtr := 0;
- pb.ioRefNum := refNum;
- pb.ioMisc := logEOF;
- SYSTEM.PUTREG(A0, SYSTEM.ADR(pb));
- PBSetEOF;
- RETURN pb.ioResult
- END SetEOF;
- (** Catalog Traversal **)
- PROCEDURE [NOSTKCHK] FSpGetCatInfo* (dir: FSSpec; index: INTEGER; VAR spec: FSSpec;
- VAR type: MacTypes.OSType; VAR id: LONGINT;
- VAR n, cDate, mDate: LONGINT): INTEGER; (** additional **)
- VAR res: INTEGER; pb: CFileInfoPBRec;
- BEGIN
- pb.ioNamePtr := SYSTEM.ADR(dir.name);
- pb.ioVRefNum := dir.vRefNum;
- pb.ioDirID := dir.parID;
- pb.ioFDirIndex := index;
- res := PBGetCatInfoSync(pb);
- IF res = 0 THEN
- (* name may have changed, thus spec := dir.
- but it must be copied component-wise otherwise implied type guard.
- this is a compiler bug!? *)
- spec.name := dir.name;
- spec.vRefNum := dir.vRefNum;
- spec.parID := dir.parID;
- IF ODD(pb.ioFlAttrib DIV 16) THEN type := 0 ELSE type := pb.ioFlFndrInfo.fdType END;
- id := pb.ioDirID;
- IF type = 0 THEN (* directory *)
- n := pb.ioFlStBlk; (* = ioDrNmFls *)
- ELSE (* file *)
- n := pb.ioFlLgLen
- END;
- cDate := pb.ioFlCrDat; (* = ioDrCrDat *)
- mDate := pb.ioFlMdDat (* = ioDrMdDat *)
- END;
- RETURN res
- END FSpGetCatInfo;
- (** File and Directory Manipulation Routines **)
- (** Opening, Creating, Deleting, Renaming, and Moving Files **)
- PROCEDURE [NOSTKCHK] FSpOpenDF* (spec: FSSpec; permission: SHORTINT; VAR refNum: INTEGER): INTEGER;
- BEGIN
- SYSTEM.PUTREG(D0, LONG(LONG(2)));
- RETURN fSpOpen(spec, permission, refNum)
- END FSpOpenDF;
- PROCEDURE [NOSTKCHK] FSpOpenRF* (spec: FSSpec; permission: SHORTINT; VAR refNum: INTEGER): INTEGER;
- BEGIN
- SYSTEM.PUTREG(D0, LONG(LONG(3)));
- RETURN fSpOpen(spec, permission, refNum)
- END FSpOpenRF;
- PROCEDURE [NOSTKCHK] FSpCreate* (spec: FSSpec; creator: MacTypes.OSType; fileType: MacTypes.OSType;
- scriptTag: INTEGER): INTEGER;
- BEGIN
- SYSTEM.PUTREG(D0, LONG(LONG(4)));
- RETURN fSpCreate(spec, creator, fileType, scriptTag)
- END FSpCreate;
- PROCEDURE [NOSTKCHK] FSpDirCreate* (spec: FSSpec; scriptTag: INTEGER;
- VAR createdDirID: LONGINT): INTEGER;
- BEGIN
- SYSTEM.PUTREG(D0, LONG(LONG(5)));
- RETURN fSpDirCreate(spec, scriptTag, createdDirID)
- END FSpDirCreate;
- PROCEDURE [NOSTKCHK] FSpDelete* (spec: FSSpec): INTEGER;
- BEGIN
- SYSTEM.PUTREG(D0, LONG(LONG(6)));
- RETURN fSpDelete(spec)
- END FSpDelete;
- PROCEDURE [NOSTKCHK] FSpGetFInfo* (spec: FSSpec; VAR fndrInfo: FInfo): INTEGER;
- BEGIN
- SYSTEM.PUTREG(D0, LONG(LONG(7)));
- RETURN fSpGetFInfo(spec, fndrInfo)
- END FSpGetFInfo;
- PROCEDURE [NOSTKCHK] FSpSetFInfo* (spec: FSSpec; fndrInfo: FInfo): INTEGER;
- BEGIN
- SYSTEM.PUTREG(D0, LONG(LONG(8)));
- RETURN fSpSetFInfo(spec, fndrInfo)
- END FSpSetFInfo;
- PROCEDURE [NOSTKCHK] FSpSetFLock* (spec: FSSpec): INTEGER;
- BEGIN
- SYSTEM.PUTREG(D0, LONG(LONG(9)));
- RETURN fSpSetFLock(spec)
- END FSpSetFLock;
- PROCEDURE [NOSTKCHK] FSpRstFLock* (spec: FSSpec): INTEGER;
- BEGIN
- SYSTEM.PUTREG(D0, LONG(LONG(0AH)));
- RETURN fSpRstFLock(spec)
- END FSpRstFLock;
- PROCEDURE [NOSTKCHK] FSpRename* (spec: FSSpec; newName: MacTypes.Str255): INTEGER;
- BEGIN
- SYSTEM.PUTREG(D0, LONG(LONG(0BH)));
- RETURN fSpRename(spec, newName)
- END FSpRename;
- PROCEDURE [NOSTKCHK] FSpCatMove* (source, dest: FSSpec): INTEGER;
- BEGIN
- SYSTEM.PUTREG(D0, LONG(LONG(0CH)));
- RETURN fSpMove(source, dest)
- END FSpCatMove;
- (** Exchanging the Data in Two Files **)
- PROCEDURE [NOSTKCHK] FSpExchangeFiles* (source, dest: FSSpec): INTEGER;
- BEGIN
- SYSTEM.PUTREG(D0, LONG(LONG(0FH)));
- RETURN fSpMove(source, dest)
- END FSpExchangeFiles;
- (** Creating File System Specifications **)
- PROCEDURE [NOSTKCHK] FSpMakeFSSpec* (vRefNum: INTEGER; dirID: LONGINT;
- fileName: MacTypes.Str255; VAR spec: FSSpec): INTEGER;
- BEGIN
- SYSTEM.PUTREG(D0, LONG(LONG(1)));
- RETURN fSpMakeFSSpec (vRefNum, dirID, fileName, spec)
- END FSpMakeFSSpec;
- (** Volume Access Routines **)
- (** Updating Volumes **)
- PROCEDURE [NOSTKCHK] FlushVol* (volName: MacTypes.StringPtr; vRefNum: INTEGER): INTEGER;
- VAR pb: HIOParamBlk; name: MacTypes.Str255;
- BEGIN
- pb.ioNamePtr := SYSTEM.ADR(name);
- pb.ioVRefNum := vRefNum;
- SYSTEM.PUTREG(A0, SYSTEM.ADR(pb));
- PBFlushVol;
- RETURN pb.ioResult
- END FlushVol;
- (** Obtaining Volume and File Information **)
- PROCEDURE [NOSTKCHK] GetVolInfo* (vRefNum: INTEGER; VAR alloc, free: LONGINT; VAR locked: BOOLEAN): INTEGER;
- VAR pb: HVolParamBlk; l: LONGINT;
- BEGIN
- pb.ioNamePtr := 0;
- pb.ioVRefNum := vRefNum;
- pb.ioVolIndex := 0;
- SYSTEM.PUTREG(A0, SYSTEM.ADR(pb));
- PBHGetVInfo;
- l := 0; SYSTEM.MOVE(SYSTEM.ADR(pb.ioVFrBlk), SYSTEM.ADR(l) + 2, 2);
- free := pb.ioVAlBlkSiz * l;
- l := 0; SYSTEM.MOVE(SYSTEM.ADR(pb.ioVNmAlBlks), SYSTEM.ADR(l) + 2, 2);
- alloc := pb.ioVAlBlkSiz * l - free;
- l := pb.ioVAtrb;
- locked := SYSTEM.BIT(l, 7) OR SYSTEM.BIT(l, 15);
- RETURN pb.ioResult
- END GetVolInfo;
- PROCEDURE [NOSTKCHK] FsRefToFSSpec* (refNum: INTEGER; VAR spec: FSSpec);
- VAR pb: FCBPBRec;
- BEGIN
- spec.name := "";
- pb.ioNamePtr := SYSTEM.ADR(spec.name);
- pb.ioFCBIndx := 0;
- pb.ioRefNum := refNum;
- SYSTEM.PUTREG(A0, SYSTEM.ADR(pb));
- SYSTEM.PUTREG(D0, LONG(LONG(8))); HFSDispatch;
- ASSERT(pb.ioResult = 0, 100);
- spec.vRefNum := pb.ioFCBVRefNum;
- spec.parID := pb.ioFCBParID;
- ASSERT(pb.ioResult = 0, 101)
- END FsRefToFSSpec;
- PROCEDURE [NOSTKCHK] FsSpecToPath* (spec: FSSpec; VAR path: MacTypes.Str255; file: BOOLEAN);
- VAR i, j, lenP, lenD, res: INTEGER; pb: CDirInfoPBRec; dir: MacTypes.Str255;
- BEGIN
- IF file THEN
- lenP := ORD(spec.name[0]);
- i := 0; WHILE i <= lenP DO path[i] := spec.name[i]; INC(i) END
- ELSE
- path := ""; lenP := 0
- END;
- pb.ioNamePtr := SYSTEM.ADR(dir);
- pb.ioVRefNum := spec.vRefNum;
- pb.ioDrParID := spec.parID;
- pb.ioFDirIndex := -1;
- REPEAT
- pb.ioDrDirID := pb.ioDrParID;
- res := PBGetCatInfoSync(pb); ASSERT(res = 0, 100);
- lenD := ORD(dir[0]) + 1;
- i := lenP; j := lenP + lenD; ASSERT(j < 256, 101);
- WHILE i # 0 DO path[j] := path[i]; DEC(i); DEC(j) END;
- path[lenD] := ":";
- i := 1; WHILE i < lenD DO path[i] := dir[i]; INC(i) END;
- INC(lenP, lenD);
- path[0] := CHR(lenP)
- UNTIL pb.ioDrDirID = 2 (* root directory *)
- END FsSpecToPath;
- END MacFileMgr.
- TextControllers.StdCtrlDesc
- TextControllers.ControllerDesc
- Containers.ControllerDesc
- Controllers.ControllerDesc
- TextRulers.StdRulerDesc
- TextRulers.RulerDesc
- TextRulers.StdStyleDesc
- TextRulers.StyleDesc
- TextRulers.AttributesDesc
- Geneva
- Documents.ControllerDesc
-